﻿using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

namespace Standard;

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("7e9fb0d3-919f-4307-ab2e-9b1860310c93")]
[ComImport]
internal interface IShellItem2 : IShellItem
{
    [return: MarshalAs(UnmanagedType.Interface)]
    object BindToHandler([In] IBindCtx pbc, [In] ref Guid bhid, [In] ref Guid riid);

    IShellItem GetParent();

    [return: MarshalAs(UnmanagedType.LPWStr)]
    string GetDisplayName(SIGDN sigdnName);

    SFGAO GetAttributes(SFGAO sfgaoMask);

    int Compare(IShellItem psi, SICHINT hint);

    [return: MarshalAs(UnmanagedType.Interface)]
    object GetPropertyStore(GPS flags, [In] ref Guid riid);

    [return: MarshalAs(UnmanagedType.Interface)]
    object GetPropertyStoreWithCreateObject(GPS flags, [MarshalAs(UnmanagedType.IUnknown)] object punkCreateObject, [In] ref Guid riid);

    [return: MarshalAs(UnmanagedType.Interface)]
    object GetPropertyStoreForKeys(IntPtr rgKeys, uint cKeys, GPS flags, [In] ref Guid riid);

    [return: MarshalAs(UnmanagedType.Interface)]
    object GetPropertyDescriptionList(IntPtr keyType, [In] ref Guid riid);

    void Update(IBindCtx pbc);

    PROPVARIANT GetProperty(IntPtr key);

    Guid GetCLSID(IntPtr key);

    System.Runtime.InteropServices.ComTypes.FILETIME GetFileTime(IntPtr key);

    int GetInt32(IntPtr key);

    [return: MarshalAs(UnmanagedType.LPWStr)]
    string GetString(IntPtr key);

    uint GetUInt32(IntPtr key);

    ulong GetUInt64(IntPtr key);

    [return: MarshalAs(UnmanagedType.Bool)]
    void GetBool(IntPtr key);
}
